import axios from "axios";
import type { AxiosInstance, AxiosError } from "axios";
import { ElMessage } from "element-plus";
import { local } from "@/utils/storage";
import { useRouter } from "vue-router";
import { Routes } from "@/router/routes";

const router = useRouter(); // 主要用于路由跳转

const MyReq: AxiosInstance = axios.create({
  // baseURL: Global.BASE_URL, // 如果有设置 baseURL 可以在这里配置
  timeout: 5000,
  withCredentials: true, // 允许自动携带 cookie 到请求头
  headers: {
    "Content-Type": "application/json",
    // token: local.get("token"),
    // source: "robotai",
  },
});

// 请求拦截器
MyReq.interceptors.request.use(
  (config: any) => {
    const token = local.get("token");
    if (token) {
      config.headers.Authorization = token; // 添加 token 到请求头
    }
    return config;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
MyReq.interceptors.response.use(
  (response) => {
    // 直接返回响应的数据，去掉对字段的任何处理
    return response;
  },
  (error) => {
    // 错误处理
    console.log('error::: ', error);
    if (error.code === 'ECONNABORTED') {
      ElMessage.error('请求超时');
    } else if (error.response) {
      const { status, data, statusText } = error.response;
      const resData = data.message ? data.message : statusText;
      ElMessage.error(`${status}: ${resData}`); // 显示错误消息给用户
    } else if (error.code === 'ERR_CANCELED') {
      ElMessage.warning("请求已终止, " + error.message);
    } else {
      ElMessage.warning("请检查您的网络连接: " + error.message);
    }
    return Promise.reject(error);
  }
);

export default MyReq;


/**
 * 文件上传 方法封装
 * 上传文件传参方式注意为form-data格式
 */
// export function uploadFile<T>(url: string, uploadForm: any): Promise<T> {
//   const fd = new FormData();
//   fd.append("fileName", uploadForm.projectId);
//   fd.append("file", uploadForm.file);
//   return new Promise((resolve, reject) => {
//     MyReq.post(url, fd, {
//       headers: {
//         "Content-Type": "multipart/form-data",
//       },
//     })
//       .then((res: any) => {
//         if (res.data.code === 200 && res.headers["token"]) {
//           setCookie("token", res.headers["token"], 21600);
//         }
//         resolve(res.data);
//       })
//       .catch((err) => {
//         reject(err);
//       });
//   });
// }
